#include<iostream>
using namespace std;
const int N = 15;
int a[N][N];
int f[N * 2][N][N];
int x, y, z;
int main()
{
	int n = 0;
	cin >> n;
	while (cin >> x >> y >> z, x)//只判断一个x是不是0就可以了，因为坐标不可能为0
	{
		a[x][y] = z;
	}
	for (int s = 2;s <= 2 * n;s++)
	{
		//s是一个坐标的横纵坐标之和
		//因为让两条路同时走，所以两个坐标的横纵之和是相等的
		for (int i = 1;i <= n;i++)
		{
			for (int j = 1;j <= n;j++)
			{
				//两个纵坐标
				int ii = s - i;int jj = s - j;
				//因为s是固定的，我们只需要遍历两个横坐标，就可以计算出两个纵坐标
				if (ii <= 0 || ii > n || jj <= 0 || jj > n) continue;
				int t = f[s-1][i-1][j];//第一种上左
				t = max(t, f[s-1][i][j]);//左左
				t = max(t, f[s-1][i - 1][j - 1]);//上上
				t = max(t, f[s-1][i][j - 1]);//左上

				//现在已经确定好了可能来的几种情况下里面的最大值
				if (i == j)
				{
					//说明这两条路走到了同一个位置
					f[s][i][j] = t + a[i][ii];
				}
				else
				{
					f[s][i][j] = t + a[i][ii]+a[j][jj];
				}
			}
		}
	}
	cout << f[2 * n][n][n] << endl;
	return 0;
}